<template>
  <div>
    <!-- 它是我们挂载echarts的节点 ，必须有宽高-->
    <div ref="container" style="width:400px;height:300px;" />
  </div>
</template>

<script>
import * as echarts from 'echarts';
/**做法：在methods选中中创建一个用来初始化echarts的方法，在mounted中调用这个初始化的方法，进行渲染
根据官方文档配合vue实现最简化的demo渲染
  1、图表的初始化位置，一定要放到mounted进行执行
  2.图表的渲染挂载节点必须具有显示的宽高
  3.在vue中通常我们会封装一个单独的method，里面包含复杂的初始化代码
  4、然后再mounted中只负责调用函数即可
图表的参数配置化
  场景：业务中的图标组件很可能会被复用多次，但是渲染的数据是不一样的
  所以要把那些可能随着业务的不同，传入不同参数的地方变成prop
图标的新数据更新
  （1）大屏可视化，有新数据进来了，使用最新的数据重新渲染图标
  实现思路：
    （1）找到一个更新我们图标的内置方法 setOption
    （2）使用watch用来监听一下，传入的参数是否变化，一点变化，调用echarts更新数据的方法
    小技巧：就是如何在多个组件选项中共享数据，-》动态的把需要共享的数据挂载到this上面去
data的性能问题：
  前提：data函数中return出去的对象里面任何一个数据不管层次有多深都会被转为响应式的数据
  问题：如果我们放到data中的数据，本身没有必要时响应式的数据，但是你放了，或者数据本身就非常庞大，但是你也放了，这个时候就会有比较严重的响应式初始化性能浪费，随着数据的变大，消耗的时间久越大
data中存放的数据规范：1、数据不能太大，2、不需要响应式的千万不要放进去
重点：在mounted中或created中，动态的往this中挂载属性或方法，既可以完成多个选项共享数据，而且不是响应式的
原因：响应式的内部处理发生在created之前，所以一旦响应结束之后，再冬动态的往this也就实例身上挂载任何属性都不会再被处理成响应式的
**/

export default {
  name: 'Radar',
  props: {
    title: {
      type: String,
      default: ''
    }
  },
  data(){
    return {

    }
    
  },
  watch: {
    title(){
      // 调用echarts实例的方法，setOption把新参数传入图标
      // 在这个函数中如何获取method中initChart中的局部变量：this-->组件实例对象，在组件中的配置项中的this是共享的,那么我们可以将myChart挂载到this上面，然后调用它的方法
      this.myChart.setOption({
        // 展开旧的配置
        ...this.option,
        // 重新覆盖里面原有的title
        title: {
          text: this.title
        }
      })
    }
  },
  mounted(){
    this.initChart()
  },
  methods: {
    initChart(){
      // 获取原生的dom节点,我们改为vue获取DOM的方法
      const chartDom = this.$refs.container
      // 调用init方法，得到的是一个echarts的实例对象
      this.myChart = echarts.init(chartDom);
      // 准备图表的参数
      this.option = {
        title: {
          text: this.title  //改造成prop传入，变成或的
        },
       
        radar: {
          // shape: 'circle',
          indicator: [
            { name: 'Sales', max: 6500 },
            { name: 'Administration', max: 16000 },
            { name: 'Information Technology', max: 30000 },
            { name: 'Customer Support', max: 38000 },
            { name: 'Development', max: 52000 },
            { name: 'Marketing', max: 25000 }
          ]
        },
        series: [
          {
            name: 'Budget vs spending',
            type: 'radar',
            data: [
              {
                value: [4200, 3000, 20000, 35000, 50000, 18000],
                name: 'Allocated Budget'
              },
              {
                value: [5000, 14000, 28000, 26000, 42000, 21000],
                name: 'Actual Spending'
              }
            ]
          }
        ]
      };
      // 调用echarts的实例方法，setOption，让参数在图表中渲染显示
      this.option && this.myChart.setOption(this.option);
    }
  }
}
</script>

<style>
</style>
